<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>使用Rust和WebAssembly整花活儿</title>
  </head>

  <body>
    Hello, World!
    <div id="message"></div>

    <script type="module">
      import init, {
        add,
        update_message,
        print_values,
        print_js_value,
        only_return_error_when_result,
        return_all_when_result,
        return_time,
        call_js_func,
        User, //
      } from "../pkg/hello_wasm.js";

      const run = async () => {
        await init();
        // const result = add(1, 2);
        // console.log(`the result from rust is: ${result}`);

        // // 调用update_message函数
        // update_message("#message", "<h1>Hello, Rust!</h1>");

        // //
        // const start = 1;
        // const end = 10;
        // const jsBoolean = true;

        // const jsUint8Array = new Uint8Array(3);
        // jsUint8Array[0] = 1;
        // jsUint8Array[1] = 2;
        // jsUint8Array[2] = 3;
        // const jsNumberArray = [30, 40, 50];

        // print_values(start, end, jsBoolean, jsUint8Array, jsNumberArray);

        // //
        // print_js_value(start);
        // print_js_value(jsBoolean);
        // print_js_value(jsUint8Array);
        // print_js_value(jsNumberArray);

        //
        // try {
        //   const res = only_return_error_when_result(1);
        //   console.log(`only_return_error_when_result get ${res}`);
        // } catch (error) {
        //   console.log(
        //     "An error is reported when the input parameter is 1: ",
        //     error
        //   );
        // }

        // try {
        //   const res = only_return_error_when_result(100);
        //   console.log(`only_return_error_when_result get ${res}`);
        // } catch (error) {
        //   console.log(
        //     "An error is reported when the input parameter is 100: ",
        //     error
        //   );
        // }

        // try {
        //   const res = return_all_when_result(1);
        //   console.log(`return_all_when_result get ${res}`);
        // } catch (error) {
        //   console.log(
        //     "An error is reported when the input parameter is 1: ",
        //     error
        //   );
        // }

        // try {
        //   const res = return_all_when_result(100);
        //   console.log(`return_all_when_result get ${res}`);
        // } catch (error) {
        //   console.log(
        //     "An error is reported when the input parameter is 100: ",
        //     error
        //   );
        // }

        console.log(return_time());
        call_js_func(); //自动输出rust内部的输出内容

        //调用rust struct
        const user = new User("rust", 20);
        console.log("--------", user);
        user.set_age(21);
        user.print_user();
      };

      run();

      // WebAssembly.instantiateStreaming(
      //   fetch("./pkg/hello_wasm_bg.wasm"),
      //   {}
      // ).then((obj) =>
      //   console.log(
      //     "the result from rust is: ",
      //     obj.instance.exports.add(1, 2000000)
      //   )
      // );
      //
    </script>
  </body>
</html>
